package com.zijidelu.luframework.domain.event;

import java.io.Serializable;
import java.util.List;

/**
 * 领域事件发布器接口。
 *
 * @author ZIJIDELU
 * @datetime 2025/10/14 23:27
 */
public interface DomainEventPublisher {
    /**
     * 发布领域事件
     *
     * @param event 领域事件
     */
    void publishEvent(DomainEvent<? extends Serializable> event);

    /**
     * 发布领域事件列表
     *
     * @param events 领域事件列表
     */
    void publishEventList(List<DomainEvent<? extends Serializable>> events);

    /**
     * 异步发布领域事件
     *
     * @param event 领域事件
     */
    void publishEventAsync(DomainEvent<? extends Serializable> event);

    /**
     * 异步发布领域事件列表
     *
     * @param events 领域事件列表
     */
    void publishEventListAsync(List<DomainEvent<? extends Serializable>> events);
}
